// pages/Users/UserContact/UserContact.js
//获取应用实例
const app = getApp();
const assetsAddress = app.globalData.global.assetsIp + '/' + app.globalData.global.assetsName;
import { queryUserContact } from '../../../api/protocol';
var pinyin = require("../../../utils/pinyin.js")
Page({

  /**
   * 页面的初始数据
   */
  data: {
    assetsAddress: assetsAddress,
    shareTitle: app.globalData.global.shareTitle,
    name: '',
    page: 0,
    loading: true,
    noMore: false,
    loadingFailed: false,
    isReachBottom: false,
    personList: [],
    isSelContact: '0', // 是否是选择联系人，1：是，0：否
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    if(wx.getStorageSync('isSelContact') != ''){
      this.setData({
        isSelContact: wx.getStorageSync('isSelContact'),
      })
      wx.setStorageSync('isFormList', '');
    }
    this._queryUserContact();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    let userId = wx.getStorageSync('userId')
    return {
      path: '/pages/Welcome/Welcome?scene='+userId,
    }
  },
  _queryUserContact(){
    let _this = this;
    queryUserContact({page: _this.data.page,name: _this.data.name,})
    .then(res => {
      if(res.success){
        var personList = [];
        let i = 0
        /**
         * 1、调用外部js的方法ChineseToPinYin对数据进行分组
         * 2、分组的结果存在排序有误的情况,例如I组,V组等没有汉字的分组
        */
        for (let index = 0; index < res.data.length; index++) {
          const item = res.data[index];
          let bool = personList.some(ite => {
            return ite.sign == pinyin.ChineseToPinYin(item.userName).substr(0, 1)
          })
          if (personList.length == 0 || !bool) {
            personList.push({
              id: i,
              sign: pinyin.ChineseToPinYin(item.userName).substr(0, 1),
              name: [item]
            })
            i++
          } else if (bool) {
            let a = pinyin.ChineseToPinYin(item.userName).substr(0, 1)
            for (let s in personList) {
              if (a == personList[s].sign) {
                personList[s].name.push(item)
              }
            }
          }
        }
        this.setData({
            personList
        })
        /**
         * 3、对分组好的数据进行排序
         * 4、根据标志sign的ASCII码进行初次排序筛选
         * 5、如果标志sign不在A到Z之间,则添加到#分组中
        */
        this.data.personList.forEach((item, index) => {
          if ((item.sign.charCodeAt() < 65 || item.sign.charCodeAt() > 90) && item.sign.charCodeAt() != 35) {
            this.data.personList.splice(index, 1, "")
            // 注:此处为防止splice分割后,数组索引index发生变化,故将需要剔除的元素替换为“”,后再将其剔除
            let i = this.data.personList.findIndex(item => {
              return item.sign == '#'
            })
            if (i != -1) {
              item.name.forEach(it => {
                this.data.personList[i].name.push(it)
              })
            } else {
              this.data.personList.push({
                id: 99,
                sign: '#',
                name: item.name
              })
            }
          }
        })
        // 利用filter方法,剔除之前存在的空元素
        personList = this.data.personList.filter(function (s) {
          return s != ''; // 注：IE9(不包含IE9)以下的版本没有trim()方法
        });
        this.setData({
          personList
        })
        // 利用sort方法进行排序
        this.data.personList.sort(this.listSort('sign'))
        // 一般情况下#分组在最下面,在此做以处理
        if (this.data.personList.length > 0 && this.data.personList[0].sign == '#') {
          this.data.personList.splice(0, 1).forEach(item => {
            this.data.personList.push(item)
          })
        }
        this.setData({
          personList
        })
        console.log(_this.data.personList,'personList')
      }else{
        wx.showToast({
          title: res.errMessage,
          icon: 'none',
        })
      }
    })
  },
  // 排序
  listSort(prop) {
    return function (a, b) {
      var value1 = a[prop].charCodeAt();
      var value2 = b[prop].charCodeAt();
      return value1 - value2
    }
  },
  onChange(e) {
    this.setData({
      name: e.detail,
    });
  },
  onSearch(){
    this._queryUserContact();
  },
  // 添加联系人
  add(e){
    let _this = this;
    let url = e.target.dataset.name||e.currentTarget.dataset.name;
    wx.navigateTo({
      url: url,
      events: {
        'updateContact': function(data){
          _this._queryUserContact();
        }
      }
    })
  },
  // 选择联系人或跳转详情
  detail(e){
    let _this = this;
    let item = e.target.dataset.item||e.currentTarget.dataset.item;
    if(_this.data.isSelContact == '1'){
      const eventChannel = _this.getOpenerEventChannel()
      eventChannel.emit('selContact',item.id);
      wx.navigateBack({delta: 2});
    }
  }
})